package com.eastfair.auth.vo;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import com.eastfair.annotation.annotation.vo.VoInfo;
import com.eastfair.annotation.base.SubjectTypeEnum;
import com.eastfair.jwt.model.AuthInfo;
import com.eastfair.projectcore.vo.FunctionVO;
import com.eastfair.projectcore.vo.MenuVO;
import com.eastfair.vo.VoGroupClass;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 用户账户信息
 * </p>
 *
 * @author ligang
 * @since 2021-07-27
 */
@Data
@ApiModel(value = "UserAccountVo", description = "用户账户信息")
public class UserAccountVo  implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键id
     */
    @ApiModelProperty(value = "主键id")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @VoInfo(groups = {VoGroupClass.all.class})
    private Long id;

    /**
     * 手机国家区号
     */
    @ApiModelProperty(value = "手机国家区号")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @VoInfo(groups = {VoGroupClass.all.class})
    private String countryCode;

    /**
     * IP地址
     */
    @ApiModelProperty(value = "IP地址")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @VoInfo(groups = {VoGroupClass.all.class})
    private String ipAddr;


    /**
     * 姓名
     */
    @ApiModelProperty(value = "姓名")
    @Size(max = 64, message = "姓名长度不能超过64")
    @TableField(value = "name", condition = LIKE)
    @Excel(name = "姓名")
    private String name;

    /**
     * 手机区号
     */
    @ApiModelProperty(value = "手机区号")
    @Size(max = 64, message = "手机区号长度不能超过64")
    @TableField(value = "mobile_country_code", condition = LIKE)
    @Excel(name = "手机区号")
    private String mobileCountryCode;

    /**
     * 手机号
     */
    @ApiModelProperty(value = "手机号")
    @Size(max = 16, message = "手机号长度不能超过16")
    @TableField(value = "mobile", condition = LIKE)
    @Excel(name = "手机号")
    private String mobile;

    /**
     * 邮箱
     */
    @ApiModelProperty(value = "邮箱")
    @Size(max = 64, message = "邮箱长度不能超过64")
    @TableField(value = "email", condition = LIKE)
    @Excel(name = "邮箱")
    private String email;

    /**
     * 是否是观众 1是 0否
     */
    @ApiModelProperty(value = "是否是观众 1是 0否")
    @TableField(value = "is_visitor")
    @Excel(name = "是否是观众 1是 0否")
    private Integer isVisitor;

    /**
     * 是否是主办 1是 0否
     */
    @ApiModelProperty(value = "是否是主办 1是 0否")
    @TableField(value = "is_sponsor")
    @Excel(name = "是否是主办 1是 0否")
    private Integer isSponsor;

    /**
     * 是否是展商 1是 0否
     */
    @ApiModelProperty(value = "是否是展商 1是 0否")
    @TableField(value = "is_actor")
    @Excel(name = "是否是展商 1是 0否")
    private Integer isActor;

    /**
     * 是否是员工 1是 0否
     */
    @ApiModelProperty(value = "是否是员工 1是 0否")
    @TableField(value = "is_employee")
    @Excel(name = "是否是员工 1是 0否")
    private Integer isEmployee;

    /**
     * 是否是游客 1是 0否
     */
    @ApiModelProperty(value = "是否是游客 1是 0否")
    @TableField(value = "is_tourist")
    @Excel(name = "是否是游客 1是 0否")
    private Integer isTourist;




    /**
     * 是否完成完善信息：1是；0否
     */
    @ApiModelProperty(value = "是否完成完善信息：1是；0否")
    @TableField(value = "is_complete_info")
    @Excel(name = "是否完成完善信息：1是；0否")
    private Integer isCompleteInfo;

    /**
     * 是否完成问卷：1是；0否
     */
    @ApiModelProperty(value = "是否完成问卷：1是；0否")
    @TableField(value = "is_complete_question")
    @Excel(name = "是否完成问卷：1是；0否")
    private Integer isCompleteQuestion;








    /**
     * 是否设置密码 1是 0否
     */
    @ApiModelProperty(value = "是否设置密码 1是 0否")
    @Excel(name = "是否设置密码 1是 0否")
    private Integer isSetPassword;


    /**
     * 角色信息
     */
    @ApiModelProperty(value = "角色信息")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @VoInfo(groups = {VoGroupClass.all.class})
    private List<RoleVo> roleVoList;

    /**
     * 菜单信息
     */
    @ApiModelProperty(value = "菜单信息")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @VoInfo(groups = {VoGroupClass.all.class})
    private List<MenuVO> menuVOList;


    /**
     * 权限字符 集合
     */
    @ApiModelProperty(value = "权限字符")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @VoInfo(groups = {VoGroupClass.all.class})
    private List<String> permissionList;



    /**
     * 事件信息
     */
    @ApiModelProperty(value = "事件信息")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @VoInfo(groups = {VoGroupClass.all.class})
    private List<FunctionVO> functionVOList;

    /**
     * token令牌
     */
    @ApiModelProperty(value = "token令牌")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @VoInfo(groups = {VoGroupClass.all.class})
    private AuthInfo authInfo;


    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 公司id
     */
    @ApiModelProperty(value = "公司id")
    @TableField(value = "company_id")
    @Excel(name = "公司id")
    private Long companyId;

    /**
     * 展商id
     */
    @ApiModelProperty(value = "展商id")
    @TableField(value = "exhibitor_id")
    @Excel(name = "展商id")
    private Long exhibitorId;

    /**
     * 观众id
     */
    @ApiModelProperty(value = "观众id")
    @TableField(value = "visitor_id")
    @Excel(name = "观众id")
    private Long visitorId;


    /**
     * 头像
     */
    @ApiModelProperty(value = "头像")
    @Size(max = 255, message = "头像长度不能超过255")
    @TableField(value = "head_img", condition = LIKE)
    @Excel(name = "头像")
    private String headImg;

    /**
     * 昵称
     */
    @ApiModelProperty(value = "昵称")
    @Size(max = 255, message = "昵称长度不能超过255")
    @TableField(value = "nick_name", condition = LIKE)
    @Excel(name = "昵称")
    private String nickName;


    /**
     * 用户类型枚举类
     */
    private SubjectTypeEnum subjectType;
}
